package com.shenzhenai.it_hei_ma_mythreadtest.test4case1;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Random;

/**
 * @author huangzehui
 * @date 31/8/2025 下午3:18 周日
 * @description
 */
public class MyThread extends Thread {

    // 共享数据
    // 100 元分成了3个红包
//    private static double money = 100;
    private static BigDecimal money = new BigDecimal(100);
    private static int count = 3;

    // 最小的中将金额
//    private static final double MIN = 0.01;
    private static final BigDecimal MIN = new BigDecimal("0.01");


    @Override
    public void run() {
        // 同步代码块
        synchronized (MyThread.class) {
            if (count == 0) {
                // 判断，共享数据是否到了末尾（已经到末尾）
                System.out.println(getName() + "没有抢到红包!");
            } else {
                // 判断，共享数据是否到了末尾（没有到末尾）
                // 定义一个变量，表示中奖的金额
                BigDecimal price;
                if (count == 1) {
                    // 表示此时是最后一个红包
                    // 就无需随机，剩余所有的钱都是中奖金额
                    price = money;
                } else {
                    // 表示第一次，第二次（随机）
                    Random r = new Random();
                    // 100元3个包
                    // 第一个红包：99.98 0.01 0.01
                    // 100 - (3-1) * 0.01
//                    double bounds = money - (count - 1) * MIN;
                    double bounds = money.subtract(BigDecimal.valueOf(count-1).multiply(MIN)).doubleValue();
//                    price = r.nextDouble(bounds);
                    price = BigDecimal.valueOf(r.nextDouble(bounds));

                    if (price.doubleValue() < MIN.doubleValue()){
                        price = MIN;
                    }
                }

                // 设置抽中红包，小数点保留两位，四舍五入
                price = price.setScale(2, RoundingMode.HALF_UP);

                // 从money当中，去掉当前中奖的金额
                // 在总金额中去掉对应的钱
//                money = money - price;
                money = money.subtract(price);
                // 红包个数 -1
                count--;
                // 本次红包信息进行打印
                System.out.println(getName() + "抢到了" + price + "元");

            }
        }
    }
}
